"""
爬虫思路：
(一) 数据来源分析
    1、爬什么？
        排名、标题、热度
    2、去哪儿爬？
        找URL
        看是静态的还是动态的（数据的加载方式）
        在源代码中能找到的就是静态的
        微博榜单是动态的ajax，因为源代码中没有


(二) 爬虫代码实现
    1、发送请求
    2、获取数据
    3、解析数据
    4、保存数据
"""
import requests

def get_json(url, headers):
    try:
        # 发送请求
        resp = requests.get(url=url, headers=headers)
        # 主动抛出异常
        resp.raise_for_status()
        # 设置编码
        resp.encoding = 'utf-8'
        # 返回json数据
        return resp.json()

    except:
        return None


def parse_json(json_data):
    result_list = []

    data = json_data['data']
    band_list = data['band_list']
    for band in band_list:
        dic = {
            'rank': band['rank'],  # 排名
            'word': band['word'],  # 标题
            'raw_hot': band.get('raw_hot'),  # 热度
        }
        result_list.append(dic)

    return result_list


def main():
    url = 'https://weibo.com/ajax/statuses/hot_band'
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35',
    }
    json_data = get_json(url, headers)
    result = parse_json(json_data)
    print(result)


if __name__ == '__main__':
    main()
